import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'
import api from '../utils/api'

Vue.use(Vuex)

export default new Vuex.Store({
  plugins: [
    createPersistedState({
      key: 'data', // 存储在localStorage中的键名
      paths: ['currentStage', 'currentQuestion', 'answers', 'testDataLoaded'], // 需要持久化的状态
      storage: window.localStorage // 使用localStorage存储
    })
  ],
  state: {
    uid: '',
    reportId: 1, // 报告ID
    currentStage: 1, // 当前测试阶段 1-5
    currentQuestion: 1, // 当前问题序号（每阶段从1开始）
    answers: [], // 存储用户的所有回答
    stageData: {}, // 存储每个阶段的数据
    testDataLoaded: false // 标记题目数据是否已加载
  },
  mutations: {
    // 设置uid
    setUid (state, uid) {
      state.uid = uid;
      console.log('setUid', state.uid);
    },
    // 设置某个阶段的数据
    setStageData (state, { stageId, data }) {
      // 使用Vue.set确保响应式更新
      Vue.set(state.stageData, stageId, data);
      // console.log('state.stageData', state.stageData);
    },
    // 设置当前问题序号
    setCurrentQuestion (state, questionNumber) {
      state.currentQuestion = questionNumber;
    },
    // 设置当前阶段序号
    setCurrentStage (state, stageNumber) {
      state.currentStage = stageNumber;
    },
    // 重置测试状态（回到第一阶段第一题，分数和答案清空）
    resetTest (state) {
      state.currentStage = 1;
      state.currentQuestion = 1;
      state.answers = [];
      state.stageData = {};
    },
    // 清除所有数据（包括持久化存储的数据）
    clearAllData (state) {
      // state.uid = '';
      state.currentStage = 1;
      state.currentQuestion = 1;
      state.answers = [];
      state.stageData = {};
      state.testDataLoaded = false;
      // 手动清除localStorage
      localStorage.removeItem('data');
      // localStorage.removeItem('uid');
    },
    // 添加用户答案
    addAnswer (state, { stageId, questionId, selectedOption, qId }) {
      // 存储答案
      state.answers.push({
        stageId,
        questionId,
        selectedOption,
        qId
      });
    }
  },
  actions: {
    // 异步加载阶段数据
    async fetchStageData ({ commit, state }, stageId) {
      try {
        // 如果已经加载过该阶段数据，直接返回
        if (state.stageData[stageId]) {
          return state.stageData[stageId];
        }

        // 准备请求参数
        const params = {
          reportId: state.reportId,
          partId: stageId
        };

        // 调用接口获取数据
        const response = await api.getQueationAndAnswer(params);

        // 检查响应是否正确
        if (response.code !== 200 || !response.data) {
          throw new Error('获取数据失败');
        }

        // 保存该阶段数据
        commit('setStageData', { stageId, data: response.data });

        // 设置数据加载标志
        state.testDataLoaded = true;

        // 返回阶段数据
        return response.data;
      } catch (error) {
        console.error(`加载阶段${stageId}数据失败:`, error);
        return null;
      }
    }
  },
  getters: {
    // 获取当前阶段的数据对象
    currentStageData (state) {
      return state.stageData[state.currentStage] || null;
    },

    // 获取当前阶段的问题列表
    currentStageQuestions (state, getters) {
      const stageData = getters.currentStageData;
      return stageData && stageData.list ? stageData.list : [];
    },

    // 获取当前题目的数据对象
    currentQuestionData (state, getters) {
      const questions = getters.currentStageQuestions;
      const questionIndex = state.currentQuestion - 1;
      return questions[questionIndex] || null;
    },

    // 获取测试进度百分比
    // testProgress (state) {
    //   // 计算已答题数
    //   const answeredQuestions = state.answers.length;

    //   // 估算总题数
    //   const estimatedTotalQuestions = 5 * 10;

    //   return Math.floor((answeredQuestions / estimatedTotalQuestions) * 100);
    // },

    // 获取各阶段的名称
    // stageNames () {
    //   return [
    //     "情感属性测试 - 第一阶段",
    //     "情感属性测试 - 第二阶段",
    //     "情感属性测试 - 第三阶段",
    //     "情感属性测试 - 第四阶段",
    //     "情感属性测试 - 最终阶段"
    //   ];
    // },

    // 获取最终结果数据
    // resultData (state) {
    //   return {
    //     answers: state.answers,
    //     completedAt: new Date().toISOString()
    //   };
    // },

    // 检查当前问题是否为当前阶段的最后一题
    isLastQuestionInStage (state, getters) {
      const questions = getters.currentStageQuestions;
      const currentQuestion = getters.currentQuestionData;

      // 如果当前问题标记为endPart，则为最后一题
      if (currentQuestion && currentQuestion.endPart) {
        return true;
      }

      // 否则检查是否为数组最后一个
      return state.currentQuestion === questions.length;
    },

    // 检查当前问题是否为整个测试的最后一题
    isLastQuestion (state, getters) {
      const currentQuestion = getters.currentQuestionData;
      console.log('currentQuestion', currentQuestion);
      return currentQuestion && currentQuestion.reportEnd === true;
    }
  }
})